1 /* 2 3 Boost Software License - Version 1.0 - August 17th, 2003 4 5 Permission is hereby granted, free of charge, to any person or organization 6 obtaining a copy of the software and accompanying documentation covered by 7 this license (the "Software") to use, reproduce, display, distribute, 8 execute, and transmit the Software, and to prepare derivative works of the 9 Software, and to permit third-parties to whom the Software is furnished to 10 do so, all subject to the following: 11 12 The copyright notices in the Software and this entire statement, including 13 the above license grant, this restriction and the following disclaimer, 14 must be included in all copies of the Software, in whole or in part, and 15 all derivative works of the Software, unless such copies or derivative 16 works are solely in the form of machine-executable object code generated by 17 a source language processor. 18 19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT 22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE 23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, 24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 DEALINGS IN THE SOFTWARE. 26 27 */ 28 29 module derelict.glib.gnode; 30 31 import derelict.glib.gtypes; 32 import derelict.glib.glibconfig; 33 34 extern (C): 35 36 alias _GNode GNode; 37 alias _Anonymous_0 GTraverseFlags; 38 alias _Anonymous_1 GTraverseType; 39 alias int function (_GNode*, void*) GNodeTraverseFunc; 40 alias void function (_GNode*, void*) GNodeForeachFunc; 41 alias void* function (const(void)*, void*) GCopyFunc; 42 43 enum _Anonymous_0 44 { 45 G_TRAVERSE_LEAVES = 1, 46 G_TRAVERSE_NON_LEAVES = 2, 47 G_TRAVERSE_ALL = 3, 48 G_TRAVERSE_MASK = 3, 49 G_TRAVERSE_LEAFS = 1, 50 G_TRAVERSE_NON_LEAFS = 2 51 } 52 53 enum _Anonymous_1 54 { 55 G_IN_ORDER = 0, 56 G_PRE_ORDER = 1, 57 G_POST_ORDER = 2, 58 G_LEVEL_ORDER = 3 59 } 60 61 struct _GNode 62 { 63 gpointer data; 64 GNode* next; 65 GNode* prev; 66 GNode* parent; 67 GNode* children; 68 } 69 70 71 72 version(Derelict_Link_Static) 73 { 74 extern( C ) nothrow 75 { 76 GNode* g_node_new(gpointer data); 77 void g_node_destroy(GNode* root); 78 void g_node_unlink(GNode* node); 79 GNode* g_node_copy_deep(GNode* node, GCopyFunc copy_func, gpointer data); 80 GNode* g_node_copy(GNode* node); 81 GNode* g_node_insert(GNode* parent, gint position, GNode* node); 82 GNode* g_node_insert_before(GNode* parent, GNode* sibling, GNode* node); 83 GNode* g_node_insert_after(GNode* parent, GNode* sibling, GNode* node); 84 GNode* g_node_prepend(GNode* parent, GNode* node); 85 guint g_node_n_nodes(GNode* root, GTraverseFlags flags); 86 GNode* g_node_get_root(GNode* node); 87 gboolean g_node_is_ancestor(GNode* node, GNode* descendant); 88 guint g_node_depth(GNode* node); 89 GNode* g_node_find(GNode* root, GTraverseType order, GTraverseFlags flags, gpointer data); 90 void g_node_traverse(GNode* root, GTraverseType order, GTraverseFlags flags, gint max_depth, GNodeTraverseFunc func, gpointer data); 91 guint g_node_max_height(GNode* root); 92 void g_node_children_foreach(GNode* node, GTraverseFlags flags, GNodeForeachFunc func, gpointer data); 93 void g_node_reverse_children(GNode* node); 94 guint g_node_n_children(GNode* node); 95 GNode* g_node_nth_child(GNode* node, guint n); 96 GNode* g_node_last_child(GNode* node); 97 GNode* g_node_find_child(GNode* node, GTraverseFlags flags, gpointer data); 98 gint g_node_child_position(GNode* node, GNode* child); 99 gint g_node_child_index(GNode* node, gpointer data); 100 GNode* g_node_first_sibling(GNode* node); 101 GNode* g_node_last_sibling(GNode* node); 102 } 103 } 104 else 105 { 106 extern( C ) nothrow 107 { 108 alias da_g_node_new = GNode* function(gpointer data); 109 alias da_g_node_destroy = void function(GNode* root); 110 alias da_g_node_unlink = void function(GNode* node); 111 alias da_g_node_copy_deep = GNode* function(GNode* node, GCopyFunc copy_func, gpointer data); 112 alias da_g_node_copy = GNode* function(GNode* node); 113 alias da_g_node_insert = GNode* function(GNode* parent, gint position, GNode* node); 114 alias da_g_node_insert_before = GNode* function(GNode* parent, GNode* sibling, GNode* node); 115 alias da_g_node_insert_after = GNode* function(GNode* parent, GNode* sibling, GNode* node); 116 alias da_g_node_prepend = GNode* function(GNode* parent, GNode* node); 117 alias da_g_node_n_nodes = guint function(GNode* root, GTraverseFlags flags); 118 alias da_g_node_get_root = GNode* function(GNode* node); 119 alias da_g_node_is_ancestor = gboolean function(GNode* node, GNode* descendant); 120 alias da_g_node_depth = guint function(GNode* node); 121 alias da_g_node_find = GNode* function(GNode* root, GTraverseType order, GTraverseFlags flags, gpointer data); 122 alias da_g_node_traverse = void function(GNode* root, GTraverseType order, GTraverseFlags flags, gint max_depth, GNodeTraverseFunc func, gpointer data); 123 alias da_g_node_max_height = guint function(GNode* root); 124 alias da_g_node_children_foreach = void function(GNode* node, GTraverseFlags flags, GNodeForeachFunc func, gpointer data); 125 alias da_g_node_reverse_children = void function(GNode* node); 126 alias da_g_node_n_children = guint function(GNode* node); 127 alias da_g_node_nth_child = GNode* function(GNode* node, guint n); 128 alias da_g_node_last_child = GNode* function(GNode* node); 129 alias da_g_node_find_child = GNode* function(GNode* node, GTraverseFlags flags, gpointer data); 130 alias da_g_node_child_position = gint function(GNode* node, GNode* child); 131 alias da_g_node_child_index = gint function(GNode* node, gpointer data); 132 alias da_g_node_first_sibling = GNode* function(GNode* node); 133 alias da_g_node_last_sibling = GNode* function(GNode* node); 134 } 135 136 __gshared 137 { 138 da_g_node_new g_node_new; 139 da_g_node_destroy g_node_destroy; 140 da_g_node_unlink g_node_unlink; 141 da_g_node_copy_deep g_node_copy_deep; 142 da_g_node_copy g_node_copy; 143 da_g_node_insert g_node_insert; 144 da_g_node_insert_before g_node_insert_before; 145 da_g_node_insert_after g_node_insert_after; 146 da_g_node_prepend g_node_prepend; 147 da_g_node_n_nodes g_node_n_nodes; 148 da_g_node_get_root g_node_get_root; 149 da_g_node_is_ancestor g_node_is_ancestor; 150 da_g_node_depth g_node_depth; 151 da_g_node_find g_node_find; 152 da_g_node_traverse g_node_traverse; 153 da_g_node_max_height g_node_max_height; 154 da_g_node_children_foreach g_node_children_foreach; 155 da_g_node_reverse_children g_node_reverse_children; 156 da_g_node_n_children g_node_n_children; 157 da_g_node_nth_child g_node_nth_child; 158 da_g_node_last_child g_node_last_child; 159 da_g_node_find_child g_node_find_child; 160 da_g_node_child_position g_node_child_position; 161 da_g_node_child_index g_node_child_index; 162 da_g_node_first_sibling g_node_first_sibling; 163 da_g_node_last_sibling g_node_last_sibling; 164 } 165 }